package com.pubinfo.passbook.common.service.contract.impl;


import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.pubinfo.passbook.common.entity.TContractWriteoffRelation;
import com.pubinfo.passbook.common.enums.ContractWriteOffTypeEnum;
import com.pubinfo.passbook.common.exception.ServiceException;
import com.pubinfo.passbook.common.mapper.TContractWriteoffRelationMapper;
import com.pubinfo.passbook.common.model.dto.contract.BackParam;
import com.pubinfo.passbook.common.model.dto.contract.ContractIdParam;
import com.pubinfo.passbook.common.model.dto.contract.WBackParam;
import com.pubinfo.passbook.common.model.ruler.UserAcc;
import com.pubinfo.passbook.common.model.vo.base.BusinessErrorCode;
import com.pubinfo.passbook.common.model.vo.base.JsonResult;
import com.pubinfo.passbook.common.model.vo.contract.*;
import com.pubinfo.passbook.common.service.contract.TContractWriteoffRelationService;
import com.pubinfo.passbook.common.service.ruler.CheckService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;

/**
 * @author 全
 * @description 针对表【t_contract_writeoff_relation(报账单关联收入及项目成本信息)】的数据库操作Service实现
 * @createDate 2021-12-07 17:47:12
 */
@Service
public class TContractWriteoffRelationServiceImpl extends ServiceImpl<TContractWriteoffRelationMapper, TContractWriteoffRelation> implements TContractWriteoffRelationService {

    @Resource
    private CheckService checkService;

    @Resource
    private TContractWriteoffRelationMapper contractWriteoffRelationMapper;

    @Override
    public JsonResult<List<WBSInfoVo>> wbsList(ContractIdParam param) {
  
      return JsonResult.success(contractWriteoffRelationMapper.selectByContactCode(param.getContractId()));
    }

    @Override
    public JsonResult<List<IncomeInfoVo>> incomeList(ContractIdParam param) {
        return JsonResult.success(contractWriteoffRelationMapper.selectIncomeListByContactCode(param.getContractId()));
    }

    @Override
    public JsonResult<CompensateBaseVo> compensateList(String currentAcct,Integer type) {
        UserAcc userAcc = checkService.getUserAcc(currentAcct,true);//根据员工账号，查询报账组织编码 报账人姓名 报账人账号 33035309
        CompensateBaseVo baseVo = new CompensateBaseVo();
        baseVo.setAccount(userAcc.getAccount());//报账人账号
        baseVo.setAccName(userAcc.getName());//报账人姓名
        baseVo.setOrgCode(userAcc.getOrgCode());//报账组织编码
        baseVo.setSapCompayCode("B011");//公司代码
        if (type == ContractWriteOffTypeEnum.carry_over.getType()) {//结转
            baseVo.setEconomicItemCode("100601");//经济事项编码
            baseVo.setEconomicItemName("非经营性业务");//经济事项名称
            baseVo.setPaymentType("8");//收支方式
            baseVo.setBizType("0");//业务类型(0-列账，1-付款,2-列并付)
            baseVo.setAccountCode("G933000009");//会计科目编码
            baseVo.setAccountName("赔补类供应商");//会计科目名称
            baseVo.setAccountType("1");//会计科目类型 选输(1-总账、2-供应商、3-客户),有科目时必须
            baseVo.setIsStaffPayment("0");//是否员工代垫(0-否)
            baseVo.setInvoiceType("9");//票据类型(9-无发票)
            baseVo.setIsRealGift("0");//是否存在实物赠送(0-否)
            baseVo.setPayTaxAttribute("3");//纳税属性(3-汇总传统)
            baseVo.setPickingMode("0");//业务场景(0-其他)
            baseVo.setUsageCode("U251");//用途编码 U251:其他非经营性业务
            baseVo.setBudgetType("2");//列账属性(2-否:不使用成本/资本预算)
        } else if (type == ContractWriteOffTypeEnum.TAXES_DRAW.getType()) {//税金计提
            baseVo.setEconomicItemCode("10060301");//经济事项编码
            baseVo.setEconomicItemName("税费计提");//经济事项名称
            baseVo.setPaymentType("8");//收支方式
            baseVo.setBizType("0");//业务类型(0-列账，1-付款,2-列并付)
            baseVo.setAccountCode("G933000009");//会计科目编码
            baseVo.setAccountName("赔补类供应商");//会计科目名称
            baseVo.setAccountType("1");//会计科目类型 选输(1-总账、2-供应商、3-客户),有科目时必须
            baseVo.setIsStaffPayment("0");//是否员工代垫(0-否)
            //baseVo.setInvoiceType("9");//票据类型(9-无发票)
            baseVo.setIsRealGift("0");//是否存在实物赠送(0-否)
            baseVo.setPayTaxAttribute("3");//纳税属性(3-汇总传统)
            baseVo.setPickingMode("0");//业务场景(0-其他)
            //baseVo.setUsageCode("U251");//用途编码 U251:其他非经营性业务
            baseVo.setBudgetType("2");//列账属性(2-否:不使用成本/资本预算)
        }
        System.err.println(baseVo);
        return JsonResult.success(baseVo);
    }

    @Override
    public JsonResult<CompensateBaseVo> costWriteOffList(Integer type,String currentAcct) {
        if (Objects.isNull(type)){
            throw new ServiceException(BusinessErrorCode.PARAM_ERROR);
        }
        UserAcc userAcc = checkService.getUserAcc(currentAcct,true);//根据员工账号，查询报账组织编码 报账人姓名 报账人账号
        CompensateBaseVo baseVo = new CompensateBaseVo();

        baseVo.setAccount(userAcc.getAccount());//报账人账号
        baseVo.setAccName(userAcc.getName());//报账人姓名
        baseVo.setOrgCode(userAcc.getOrgCode());//报账组织编码
        baseVo.setSapCompayCode("B011");//公司代码  可由业务提供
        if (type == ContractWriteOffTypeEnum.INCREASE_COST.getType()) {
            baseVo.setWriteoffType(ContractWriteOffTypeEnum.INCREASE_COST.getType());//冲销
            baseVo.setEconomicItemCode("100601");//经济事项编码
            baseVo.setEconomicItemName("非经营性业务");//经济事项名称
            baseVo.setPaymentType("8");//收支方式
            baseVo.setBizType("0");//业务类型(0-列账，1-付款,2-列并付)
            baseVo.setAccountCode("6401140216");//会计科目编码
            baseVo.setAccountName("经营成本,维护修理支出，代维..");//会计科目名称
            baseVo.setAccountType("1");//会计科目类型 选输(1-总账、2-供应商、3-客户),有科目时必须
            baseVo.setIsStaffPayment("0");//是否员工代垫(0-否)
            baseVo.setInvoiceType("9");//票据类型(9-无发票)
            baseVo.setIsRealGift("0");//是否存在实物赠送(0-否)
            baseVo.setPayTaxAttribute("2");//纳税属性(3-汇总传统)
            baseVo.setPickingMode("0");//业务场景(0-其他)
            baseVo.setUsageCode("U184");//用途编码 U251:其他非经营性业务
            baseVo.setBudgetType("1");//列账属性(2-否:不使用成本/资本预算)
        } else if (type == ContractWriteOffTypeEnum.Write_off_cost.getType()) {
            baseVo.setWriteoffType(ContractWriteOffTypeEnum.Write_off_cost.getType());//报账类型,冲冲销
            baseVo.setEconomicItemCode("100601");//经济事项编码
            baseVo.setEconomicItemName("非经营性业务");//经济事项名称
            baseVo.setPaymentType("8");//收支方式
            baseVo.setBizType("0");//业务类型(0-列账，1-付款,2-列并付)
            baseVo.setAccountCode("6401140216");//会计科目编码
            baseVo.setAccountType("1");//会计科目类型 选输(1-总账、2-供应商、3-客户),有科目时必须
            baseVo.setIsStaffPayment("0");//是否员工代垫(0-否)
            baseVo.setInvoiceType("9");//票据类型(9-无发票)
            baseVo.setIsRealGift("0");//是否存在实物赠送(0-否)
            baseVo.setPayTaxAttribute("3");//纳税属性(3-汇总传统)
            baseVo.setPickingMode("7");//业务场景(0-其他)
            baseVo.setUsageCode("U184");//用途编码 U251:其他非经营性业务
            baseVo.setBudgetType("1");//列账属性(2-否:不使用成本/资本预算)
        }
        return JsonResult.success(baseVo);
    }

    @Override
    public List<IncomeInfoBackVo> IncomeInfoBackList(BackParam code) {
        return this.baseMapper.IncomeInfoBackList(code);
    }

    @Override
    public List<TContractProjectCostItemsBackVo> WBSInfoBackList(WBackParam param) {
        return this.baseMapper.WBSInfoBackList(param);
    }


}
